package busco

import (
	"wails/schema/enums/busenum"
)

// 携带和装备类的增益不支持【增益_时间】
// @schema_export --ident=schema --json --config=卡片
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡片
type B卡片 struct {
	B主体

	// @alias 主体种类
	Z主体种类 busenum.Z主体种类_卡片
	// 用于搜索或者生成数值表时排序使用
	// @alias 序号
	X序号 int
	// @alias 标旗
	B标旗 map[K卡片标旗]bool
	// @alias 叠加数
	D叠加数 int
	// 【创建属性】为创建时设置的动态属性
	// 基础属性由等级决定
	// @alias 创建属性
	C创建属性 map[string]interface{} `_type:"扩展属性"`
	// @alias 创建执行
	C创建执行 string `link:"执行"`
	// @alias 创建奖励
	C创建奖励 string `link:"奖励"`
	// @alias 使用消费
	S使用消费 string `link:"消费"`
	// 使用后触发的执行，使用后物品数量减一
	// @alias 使用执行
	S使用执行 string `link:"执行"`
	// 分解获得的奖励，分解后销毁物品
	// @alias 分解奖励
	F分解奖励 string `link:"奖励"`
	// 当卡片处于已装备状态时，指定主体获得【装备修正】
	// 装备状态由移入到可装备的卡包触发
	// @alias 装备修正
	Z装备修正 interface{} `_type:"主体修正项"`
	// @alias 激活条件
	J激活条件 map[string]string `link:"条件"`
	// 当卡片处于已激活状态时，指定主体获得【激活修正】
	// 激活状态通过玩家或系统操作卡片，设置卡片为激活状态
	// @alias 激活卡片
	J激活卡片 string `link:"卡片"`
	// @alias 激活到卡包
	J激活到卡包 *S查找卡槽
	// @alias 激活执行
	J激活执行 string `link:"执行"`
	// 只能挂载主体为卡片的功能集
	// @alias 功能集
	G功能集 map[string]string `link:"功能"`
	// 持续时间到达后，数量减一
	// @alias 持续时间
	C持续时间 float64
	// @see 卡包.卡槽设置.占位标签
	// @alias 占位标签
	Z占位标签 string
	// @alias 创建表现
	C创建表现 map[string]*S卡片创建表现
}

type S卡片创建表现 struct {
	// @alias 创建时机
	C创建时机 busenum.E卡片创建时机

	// @alias 销毁时机
	X销毁时机 busenum.E卡片销毁时机

	// @alias 被动持续
	B被动持续 bool

	// @alias 表现
	B表现 string `link:"表现"`
}

type S卡片主体修正 struct {
	// 卡槽激活后，修正装备到主体
	// 往上追溯遇到的第一个指定主体种类的主体
	// @alias 装备到主体
	Z装备到主体 busenum.Z主体种类
	// 符合条件才能装备修正
	// 场景: 达到指定等级
	// @alias 装备条件
	Z装备条件 map[string]string `link:"条件"`
	// @alias 装备执行
	Z装备执行 string `link:"执行"`
	// @alias 卸下执行
	X卸下执行 string `link:"执行"`
	// 如果增益的主体为单位, 则直接修正单位的单位属性
	// 如果增益的主体为角色, 则修改角色下所有单位的单位属性. 玩家/游戏服/公会/队伍/团队同角色
	// 当增益的修正为单位时, 不支持[主体]为物品/技能
	// @alias 装备修正集合
	Z装备修正集合 map[string]interface{} `_type:"主体修正项"`
}

type S卡片_移入条件 struct {
	// @alias 卡包
	K卡包 string `link:"卡包"`
	// 符合条件才能装备到【装备卡包】
	// 场景：装备等级、单位属性符合要求
	// @alias 条件
	T条件 map[string]string `link:"条件"`
}

// @schema_export --ident=schema --json --config=卡片
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡片_单位
type B卡片_单位 struct {
	B卡片
	// @alias 分类
	F分类 D单位分类
	// @alias 种类
	Z种类 S单位种类

	// 【单位】的属性将采用【卡片】的属性代替【单位】的【等级属性】
	// @alias 使用卡片属性
	S使用卡片属性 bool
}

// @schema_export --ident=schema --json --config=卡片
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡片_物品
type B卡片_物品 struct {
	B卡片
	// @alias 分类
	F分类 W物品分类
	// @alias 种类
	Z种类 W物品种类
}

// 货币、材料、称号，强化，官职等比较独立的
// @schema_export --ident=schema --json --config=卡片
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡片_资源
type B卡片_资源 struct {
	B卡片
}

// @schema_export --ident=schema --json --config=卡片
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡片_附加物
type B卡片_附加物 struct {
	B卡片

	// @alias 附加到卡片
	F附加到卡片 *S查找卡片主体

	// 设置后，不用填写【装备卡包】和【装备条件】就能装备卡片
	// @alias 允许默认装备
	Y允许默认装备 bool
}

// @schema_export --ident=schema --json --config=卡片
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡片_技能
type B卡片_技能 struct {
	B卡片
	// @alias 分类
	F分类 J技能分类
	// @alias 种类
	Z种类 J技能种类

	// 【技能】的属性将采用【卡片】的属性代替【技能】的【等级属性】
	// @alias 使用卡片属性
	S使用卡片属性 bool
}

// @schema_go --EnumToString=true
// @alias 物品标旗
type K卡片标旗 int

const (
	K卡片标旗_可叠加    K卡片标旗 = 0
	K卡片标旗_可装备    K卡片标旗 = 1
	K卡片标旗_可使用    K卡片标旗 = 2
	K卡片标旗_可批量使用  K卡片标旗 = 3
	K卡片标旗_可分解    K卡片标旗 = 4
	K卡片标旗_可丢弃    K卡片标旗 = 5
	K卡片标旗_可售卖    K卡片标旗 = 6
	K卡片标旗_禁止丢弃确认 K卡片标旗 = 7
	K卡片标旗_禁止移动   K卡片标旗 = 8
	// 可强化的道具
	K卡片标旗_可强化        K卡片标旗 = 9
	K卡片标旗_使用后数量不变    K卡片标旗 = 10
	K卡片标旗_允许移动到      K卡片标旗 = 11
	K卡片标旗_允许战斗关联     K卡片标旗 = 12
	K卡片标旗_允许派发卡片表现事件 K卡片标旗 = 13
	// 该单位的活力将记录下来，下次进入场景时，恢复该单位的活力
	K卡片标旗_记录单位活力 K卡片标旗 = 14
)

// @alias
// @schema_go --EnumToString=true
// @alias 卡片修正处理模式
type K卡片修正处理模式 int

const (
	// 合并模式：所有【装备修正】合并到卡包主体的【配置的装备修正】
	K卡片修正处理模式_合并 K卡片修正处理模式 = iota
	// 装备模式：当符合修正条件时，所有的【配置的装备修正】将被装备
	K卡片修正处理模式_装备
)

// @schema_go
// @alias 增益目标
type Z增益目标 int

const (
	// 由触发增益的前配置决定
	// 例如单位的[增益目标]·
	Z增益目标_自动 Z增益目标 = iota
	Z增益目标_卡片
	Z增益目标_全局
)
